// 折叠tokens 将#和/之间的tokens能够整合起来，作为它下标为3的项
export default function nestTokens(tokens) {
    // 结果数据
    var nestedTokens = [];

    // 栈结构 存放小tokens，栈顶的tokens数组中当前操作的这个tokens小数组
    var section = [];

    // 收集器 天生只想nestedTokens结果数组，引用类型值，所以指向的是同一个数组
    // 收集器的指向会变化，当遇见#时，收集器会指向这个token的下标为2的新数组
    var collector = nestedTokens;

    for (let i = 0; i < tokens.length; i++) {
        let token = tokens[i];
        if (token[0] == "#") {
            // 收集器中放入token
            collector.push(token);
            // 入栈
            section.push(token);
            collector = token[2] = [];
        } else if (token[0] == "/") {
            // 出栈
            // pop()会返回弹出的项
            section.pop();
            collector = section.length > 0 ? section[section.length - 1][2] : nestedTokens;
        } else {
            collector.push(token);
        }
    }

    return nestedTokens;
}